package model;

/**
 * La classe {@link Mot} représente un mot dans une balise
 */
public class Mot
{
  /** Id du terme dans la base de données. */
  private int id;
  
  /** Contenu du terme. */
  private String value;
  
  /**
   * Créé un nouveau mot avec une valeur et un Id par défaut (-1)
   *
   * @param value the value
   */
  public Mot(String value)
  {
    this(-1, value);
  }
  
  /**
   * Créé un nouveau mot avec un id et une valeur
   *
   * @param id the id
   * @param value the value
   */
  public Mot(int id, String value)
  {
    this.id = id;
    this.value = value;
  }
  
  /**
   * Gets the id.
   *
   * @return the id
   */
  public int getId()
  {
    return id;
  }
  
  /**
   * Sets the id.
   *
   * @param id the new id
   */
  public void setId(int id)
  {
    this.id = id;
  }

  /**
   * Gets the valeur.
   *
   * @return the valeur
   */
  public String getValue()
  {
    return value;
  }

  /**
   * Merge an object with the current object.
   *
   * @param mot the mot
   * @return the mot
   */
  public Mot merge(Mot mot)
  {
    int id = mot.getId() != -1 ? mot.getId() : this.id;
    String value = mot.getValue() != null ? mot.getValue().equals("") ? this.value : mot.getValue() : this.value;
    return new Mot(id, value);
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public boolean equals(Object obj)
  {
    boolean equals = false;
    if (obj instanceof Mot)
    {
      Mot mot = (Mot) obj;
      equals = mot.getValue().equals(value);
    }
    else if (obj instanceof String)
    {
      equals = value.equals(obj);
    }
    return equals;
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public int hashCode()
  {
    return 12 * value.hashCode();
  }
  
  /**
   * {@inheritDoc}
   */
  @Override
  public String toString()
  {
    return this.value;
  }
}
